import type { IQuery, Response, TableResponse } from '@/api/config/types';
import { exportFile } from '@/api/utils/file';
import { message } from 'ant-design-vue';
import axios from 'axios';
import type { AxFiles } from './types';

/**
 * @description: 统一管理API前缀，方便修改
 */
const REQUEST_PREFIX = 'ax/files';

/**
 * @description: 查询文件管理列表
 * @param {IQuery} query 系统通用查询对象
 */
export const fetchFilesList = (query: IQuery) => {
  return axios.get<TableResponse<AxFiles>>(`${REQUEST_PREFIX}/list`, {
    params: query,
  });
};

/**
 * @description: 查询文件管理详细
 * @param {number} fileId 主键ID
 */
export const fetchFilesById = (fileId: number | string) => {
  return axios.get<Response<AxFiles>>(`${REQUEST_PREFIX}/${fileId}`);
};

/**
 * @description: 新增文件管理
 * @param {AxFiles} data 需要添加的数据
 */
export const createFiles = (data: AxFiles) => {
  return axios.post<Response<AxFiles>>(`${REQUEST_PREFIX}`, data);
};

/**
 * @description: 更新文件管理
 * @param {AxFiles} data 更新数据
 */
export const updateFiles = (data: AxFiles) => {
  return axios.put<Response<AxFiles>>(`${REQUEST_PREFIX}`, data);
};

/**
 * @description: 删除文件管理
 * @param {number[]} fileIds 传入ID数组,可以删除多个
 */
export const deleteFiles = (fileIds: number[]) => {
  return axios.delete<Response<AxFiles>>(`${REQUEST_PREFIX}/${fileIds.join(',')}`);
};

/**
 * @description: 加载所有文件管理
 */
export const loadAllFiles = (query: Partial<IQuery>) => {
  return axios.get<TableResponse<AxFiles>>(`${REQUEST_PREFIX}/loadAll`, {
    params: query,
  });
};

/**
 * @description: 导出文件管理
 */
export const exportFiles = async (query: IQuery) => {
  try {
    await exportFile({
      url: `${REQUEST_PREFIX}/export`,
      data: query,
      fileName: '文件管理.xls',
      method: 'POST',
    });
    message.success(`成功下载`);
  } catch (e) {
    message.success(`下载失败`);
  }
};

export const batchAddition = (list: Partial<AxFiles>[]) => {
  return axios.post(`${REQUEST_PREFIX}/batchAddition`, list);
};
/**
 * @description: 下载模板,用于批量导入文件管理
 */
export const importFilesTemplate = () => {
  try {
    exportFile({
      url: `${REQUEST_PREFIX}/importTemplate`,
      method: 'POST',
      fileName: '文件管理.xls',
    });
  } catch (e) {
    message.success(`下载失败`);
  }
};
